home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Arashi 1.1.1 / source code / For your think c folder / VA Kit ƒ / VA7Segment.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-09  |  3.2 KB  |  195 lines  |  [TEXT/KAHL]

  1. /*/
  2.      Project Arashi: VA7Segment.c
  3.      Major release: Version 1.1d2, 9/5/95
  4.  
  5.      Last modification: Wednesday, September 9, 1992, 21:40
  6.      Created: Friday, March 24, 1989, 15:07
  7.  
  8.      Copyright © 1989-1992, Juri Munkki
  9. /*/
  10.  
  11. /*
  12. **    These routines are a precursor to the 14 segment
  13. **    display routines. I left them here, because it is
  14. **    faster to draw the numbers with just 8 segments.
  15. **
  16. **    Your digital watch might have the same kind of
  17. **    numbers that these routines produce.
  18. **
  19. **    The 14 segment routines are better documented and
  20. **    somewhat similar to the following.
  21. */
  22.  
  23. #include "VA.h"
  24. #include "VAInternal.h"
  25.  
  26.  
  27. char    numbers[]={    1+2+4+8+16+32,        /*    0    */
  28.                       2+4,                /*    1    */
  29.                     1  +4+8   +32+64,    /*    2    */
  30.                     1+2+4+8      +64,    /*    3    */
  31.                       2+4  +16   +64,    /*    4    */
  32.                     1+2  +8+16   +64,    /*    5    */
  33.                     1+2  +8+16+32+64,    /*    6    */
  34.                       2+4+8,            /*    7    */
  35.                     1+2+4+8+16+32+64,    /*    8    */
  36.                     1+2+4+8+16   +64,    /*    9    */
  37.                     0};
  38. void    VADrawSegments(x,y,code)
  39. int        x,y,code;
  40. {
  41.     asm    {    
  42.             move.l    D3,-(SP)
  43.             move.w    code,D3
  44.             move.l    VA.base,A0
  45.             move.w    y,D0
  46.             move.w    VA.row,D1
  47.             mulu.w    D1,D0
  48.             add.l    D0,A0
  49.             add.w    x,A0
  50.             addq.l    #1,A0
  51.             
  52.             moveq.l    #-1,D0
  53.             move.w    VA.segmscale,D2
  54.             ror.w    #1,D3
  55.             bcc.s    @seg0
  56.             move.w    VA.color,D0
  57.     @seg0    
  58.             move.b    D0,(A0)+
  59.             dbra    D2,@seg0
  60.             
  61.             sub.w    D1,A0
  62.  
  63.             moveq.l    #-1,D0
  64.             move.w    VA.segmscale,D2
  65.             ror.w    #1,D3
  66.             bcc.s    @seg1
  67.             move.w    VA.color,D0
  68.     @seg1
  69.             move.b    D0,(A0)
  70.             sub.w    D1,A0
  71.             dbra    D2,@seg1
  72.             
  73.             sub.w    D1,A0
  74.  
  75.             moveq.l    #-1,D0
  76.             move.w    VA.segmscale,D2
  77.             ror.w    #1,D3
  78.             bcc.s    @seg2
  79.             move.w    VA.color,D0
  80.     @seg2
  81.             move.b    D0,(A0)
  82.             sub.w    D1,A0
  83.             dbra    D2,@seg2
  84.             
  85.             moveq.l    #-1,D0
  86.             move.w    VA.segmscale,D2
  87.             ror.w    #1,D3
  88.             bcc.s    @seg3
  89.             move.w    VA.color,D0
  90.     @seg3
  91.             move.b    D0,-(A0)
  92.             dbra    D2,@seg3
  93.             
  94.             subq.l    #1,A0
  95.             add.w    D1,A0
  96.  
  97.             moveq.l    #-1,D0
  98.             move.w    VA.segmscale,D2
  99.             ror.w    #1,D3
  100.             bcc.s    @seg4
  101.             move.w    VA.color,D0
  102.     @seg4
  103.             move.b    D0,(A0)
  104.             add.w    D1,A0
  105.             dbra    D2,@seg4
  106.             
  107.             move.l    A0,A1
  108.             add.w    D1,A0
  109.  
  110.             moveq.l    #-1,D0
  111.             move.w    VA.segmscale,D2
  112.             ror.w    #1,D3
  113.             bcc.s    @seg5
  114.             move.w    VA.color,D0
  115.     @seg5
  116.             move.b    D0,(A0)
  117.             add.w    D1,A0
  118.             dbra    D2,@seg5
  119.             
  120.             addq.l    #1,A1
  121.             moveq.l    #-1,D0
  122.             move.w    VA.segmscale,D2
  123.             ror.w    #1,D3
  124.             bcc.s    @seg6
  125.             move.w    VA.color,D0
  126.     @seg6
  127.             move.b    D0,(A1)+
  128.             dbra    D2,@seg6
  129.             move.l    (sp)+,D3
  130.         }
  131. }
  132.  
  133. void    VADrawNumber(num,x,y)
  134. register    long    num;
  135. register    int        x,y;
  136. {
  137.     register    int        dig,neg;
  138.                 int        mode;
  139.  
  140.     mode=QD32COMPATIBLE;
  141.     SwapMMUMode(&mode);
  142.  
  143.     if(num<0)
  144.     {    num=-num;
  145.         neg=-1;
  146.     }
  147.     else
  148.     {    neg=0;
  149.     }
  150.     do
  151.     {    dig= num % 10;
  152.         num/=10;
  153.         VADrawSegments(x,y,numbers[dig]);
  154.         x-= VA.segmscale + 7;
  155.     }    while(num!=0 && x>0);
  156.     if(x>0 && neg)
  157.         VADrawSegments(x,y,64);
  158.  
  159.     SwapMMUMode(&mode);
  160. }
  161.  
  162. void    VADrawPadNumber(num,x,y,width)
  163. register    long    num;
  164. register    int        x,y,width;
  165. {
  166.     register    int        dig,neg;
  167.                 int        mode;
  168.  
  169.     mode=QD32COMPATIBLE;
  170.     SwapMMUMode(&mode);
  171.  
  172.     if(num<0)
  173.     {    num=-num;
  174.         neg=-1;
  175.     }
  176.     else
  177.     {    neg=0;
  178.     }
  179.     do
  180.     {    dig= num % 10;
  181.         num/=10;
  182.         VADrawSegments(x,y,numbers[dig]);
  183.         x-= VA.segmscale + 7;
  184.     }    while(num!=0 && x>0 && --width);
  185.     
  186.     if(x>0 && neg && --width>0)
  187.     {    VADrawSegments(x,y,64);
  188.         x-= VA.segmscale + 7;
  189.     }
  190.     while(--width>0 && x>0)
  191.     {    VADrawSegments(x,y,0);
  192.         x-= VA.segmscale + 7;
  193.     }
  194.     SwapMMUMode(&mode);
  195. }